perm filename DDDPY.FAI[GO,ALS] blob
sn#105691 filedate 1974-06-12 generic text, type T, neo UTF8
00100 TITLE DISPLY -- DISPLAY PRIMITIVES
00200
00300 OPDEF DPYPOS [XWD 702100,0]
00400 OPDEF DPYSIZ [XWD 702140,0]
00500 OPDEF DPYCLR [XWD 701000,0]
00600 OPDEF UPG [XWD 703000,0]
00700 OPDEF GETLIN [TTYUUO 6,]
00800
00900
01000 EXTERNAL USERERR
01100 A←1
01200 B←2
01300 C←3
01400
01500 SP←16
01600 P←17
01700
01800 INTERNAL DPYSET,AIVECT,AVECT,APT,RIVECT,RVECT,RPT
01900 INTERNAL APOINT,RPOINT,AVECW,AIVECW,RVECW,RIVECW,APOINW,GVECW
02000 INTERNAL LOCATE,DJUMP,DJSR,FIXUP,DPYOUT,HYDPOG,DPYCLR,DPYBIG,DPYBRT
02100 INTERNAL DPYRESET,DPYPARS
02200 INTERNAL CLRBFR,GVECT,DTYO,DPYSST
02300
02400 RV←←6
02500 AV←←106
02600 VIS←←0
02700 EP←←20
02800 INV←←40
02900 SVS←100
03000 SV←2
03100 DEFINE COMPAT(N)<
03200 POP P,RETURN
03300 JSP COMP-N>
03400
03500 POP P,5
03600 POP P,4
03700 POP P,3
03800 POP P,2
03900 POP P,1
04000 COMP: JRST @0
04100
00100 ;SAIL DECLARATIONS
00200 ;EXTERNAL PROCEDURE GVECT(INTEGER X,Y,OP,SIZE,BRT);
00300 ;EXTERNAL PROCEDURE AIVECT(INTEGER X,Y)
00400 ;EXTERNAL PROCEDURE AVECT(INTEGER X,Y)
00500 ;EXTERNAL PROCEDURE APT(INTEGER X,Y)
00600 ;EXTERNAL PROCEDURE RIVECT(INTEGER X,Y)
00700 ;EXTERNAL PROCEDURE RVECT(INTEGER X,Y)
00800 ;EXTERNAL PROCEDURE RPT(INTEGER X,Y)
00900
01000 GVECT: COMPAT(5)
01100 DPB C+1,[POINT 3,C,27]
01200 DPB C+2,[POINT 3,C,24]
01300 JRST LVC
01400
01500 AIVECT: MOVEI C,INV+AV
01600 JRST LV
01700 AVECT: MOVEI C,VIS+AV
01800 JRST LV
01900 APOINT:
02000 APT: MOVEI C,EP+AV
02100 LV: COMPAT(2)
02200 LVC: DPB A,[POINT 11,C,10]
02300 DPB B,[POINT 11,C,21]
02400 LV2: AOS A,DPYPTR
02500 MOVEM C,(A)
02600 LV3: HRLI A,<(<POINT 7,0,35>)>
02700 MOVEM A,DPYPTR
02800 HRRZI A,(A)
02900 CAML A,BUFEND
03000 JRST DPYOVF
03100 JRST @RETURN
03200
03300 DPYOVF: PUSH P,[0]
03400 PUSH P,[1] ;ALLOW CONTINUE
03500 PUSH SP,[=19]
03600 PUSH SP,[POINT 7,[ASCIZ /DPY BUFFER OVERFLOW/]]
03700 PUSHJ P,USERERR
03800 SOS DPYPTR
03900 JRST @RETURN
04000
04100 RIVECT: MOVEI C,INV+RV
04200 JRST RVG
04300 RVECT: MOVEI C,VIS+RV
04400 JRST RVG
04500 RPOINT:
04600 RPT: MOVEI C,EP+RV
04700 RVG: COMPAT(2)
04800 SKIPE RELFLG#
04900 JRST LVC
05000 CAML A,[-SVS]
05100 CAIL A,SVS
05200 JRST LVC
05300 CAML B,[-SVS]
05400 CAIL B,SVS
05500 JRST LVC
05600 ANDCMI C,RV ;CAN CONSTRUCT SHORT VECTOR
05700 DPB A,[POINT 7,C,22]
05800 DPB B,[POINT 7,C,29]
05900 LSH C,20
06000 ORI C,SV+INV ;MAKE 2ND VECTORE INVISIBLE - ZERO LENGTH
06100 MOVE A,@DPYPTR
06200 TLZ A,777774
06300 CAIE A,(C) ;WAS LAST DPY OUTPUT A SHORT VECTOR WORD WITH
06400 ;2ND VECTOR ZERO?
06500 JRST LV2 ;NO
06600 LSH C,-24 ;YES, PUT IT THERE
06700 DPB C,[POINT 16,@DPYPTR,31]
06800 HRRZ A,DPYPTR
06900 JRST @RETURN
07000
07100 INTERNAL NORELOPT,RELOPT
07200 NORELOPT:SETOM RELFLG
07300 POPJ P,
07400
07500 RELOPT: SETZM RELFLG
07600 POPJ P,
00100
00200 INTERNAL GVECW,AIVECW,AVECW,APOINW,RIVECW,RVECW,RPOINW
00300 GVECW: COMPAT(5)
00400 DPB C+1,[POINT 3,C,27]
00500 DPB C+2,[POINT 3,C,24]
00600 JRST LVCW
00700
00800 AIVECW: MOVEI C,INV+AV
00900 JRST LVW
01000 AVECW: MOVEI C,VIS+AV
01100 JRST LVW
01200 APOINW: MOVEI C,EP+AV
01300 LVW: COMPAT(2)
01400 LVCW: DPB A,[POINT 11,C,10]
01500 DPB B,[POINT 11,C,21]
01600 MOVE A,C
01700 JRST @RETURN
01800
01900 RIVECW: MOVEI C,INV+RV
02000 JRST LVW
02100 RVECW: MOVEI C,VIS+RV
02200 JRST LVW
02300 RPOINW: MOVEI C,EP+RV
02400 JRST LVW
00100
00200 ;SAIL DECLARATIONS
00300 ;EXTERNAL INTEGER PROCEDURE LOCATE
00400 ;EXTERNAL PROCEDURE DTYO(INTEGER CHAR)
00500 ;EXTERNAL PROCEDURE DPYSST(STRING S);
00600 ;EXTERNAL PROCEDURE DJUMP(INTEGER ADR)
00700 ;EXTERNAL PROCEDURE DJSR(INTEGER ADR)
00800 ;EXTERNAL PRODECURE FIXUP(INTEGER ADR,VAL)
00900
01000 LOCATE: HRRZ A,DPYPTR
01100 POPJ P,
01200
01300 DTYO: COMPAT(1)
01400 IDPB A,DPYPTR
01500 HRRZ A,DPYPTR
01600 CAML A,BUFEND
01700 JRST DPYOVF
01800 JRST @RETURN
01900
02000 DPYSST: POP SP,1
02100 POP SP,2
02200 HRRZS 2 ;LENGTH
02300 JUMPLE 2,SSRET
02400 ILDB 3,1
02500 IDPB 3,DPYPTR
02600 SOJG 2,.-2
02700 SSRET: HRRZ 1,DPYPTR
02800 CAML 1,BUFEND
02900 JRST [POP P,RETURN
03000 JRST DPYOVF]
03100 POPJ P,
03200
03300 DJUMP: MOVEI C,1B31
03400 JRST DJ2
03500
03600 DJSR: MOVEI C,24
03700 DJ2: COMPAT(1)
03800 MOVSS A
03900 ADD C,A
04000 JRST LV2
04100
04200 FIXUP: COMPAT(2)
04300 HRLM B,(A)
04400 JRST @RETURN
00100
00200 ;SAIL DECLARATIONS
00300 ;EXTERNAL PROCEDURE DPYOUT(INTEGER PIECE_OF_GLASS)
00400 ;EXTERNAL PROCEDURE DPYCLR;
00500 ;EXTERNAL PROCEDURE DPYBIG(INTEGER SIZE);
00600 ;EXTERNAL PROCEDURE DPYTST;
00700 ;EXTERNAL PROCEDURE HYDPOG(INTEGER PIECE_OF_GLASS)
00800 ;EXTERNAL PROCEDURE CLRBFR;
00900 ;EXTERNAL PROCEDURE DPYSET(INTEGER ARRAY BUF);
01000
01100
01200 ; DPYTST TESTS TTY TO SEE IF IT IS A DPY
01300 ; III DPY=0, DATA DISK=1, OTHERWISE=-1
01400 INTERNAL DPYTST
01500 DPYTST: SETOB 1,DPYFLG
01600 GETLIN 1
01700 TLNE 1,421000 ;DPY OR PTY ON DPY?
01800 SETZM DPYFLG ;WE ARE ON A DPY
01900 TLNE 1,020000 ;ON A DATA DISK?
02000 AOS DPYFLG
02100 MOVE 1,DPYFLG
02200 POPJ P,
02300
02400 DPYBIG: COMPAT(1)
02500 MOVEI 3,INV+RV ;ZERO LENGTH RELATIVE-INVISIBLE VECTOR
02600 DPB 1,[POINT 3,3,27]
02700 JRST LV2
02800
02900 DPYBRT: COMPAT(1)
03000 MOVEI 3,INV+RV
03100 DPB 1,[POINT 3,3,24]
03200 JRST LV2
03300
03400 DPYCLR: SKIPLE DPYFLG
03500 JRST [PUSH P,[0]
03600 PUSHJ P,HYDPOG
03700 JRST .+1]
03800 SKIPL DPYFLG#
03900 DPYCLR
04000 MOVSI 777774
04100 MOVEM POGWD
04200 SETZM POGON
04300 SETZM BUFHD
04400 POPJ P,
04500
04600 EXTERNAL IIICVT
04700 DPYOUT: PUSHJ P,DPYPARS
04800 HRRZ B,DPYPTR
04900 SUB B,BUFHD
05000 ADDI B,1
05100 MOVEM B,BUFHD+1
05200 JSP POGSUB
05300 ORM 1,POGON#
05400 SH2: COMPAT(1)
05500 DPB A,[POINT 4,SH1,12]
05600 JUMPL A,FALSE
05700 SKIPE A,DPYFLG
05800 JRST [JUMPL A,FALSE
05900 MOVE A,BUFHD
06000 SUBI A,2
06100 PUSH P,A
06200 PUSH P,RETURN
06300 JRST IIICVT]
06400 SH1: UPG BUFHD
06500 FALSE: MOVEI A,0
06600 JRST @RETURN
06700
06800 CLRBFR: COMPAT(0)
06900 JRST CLR2
07000
07100 DPYSET: PUSHJ P,DPYTST
07200 COMPAT(1)
07300 ADDI 1,2
07400 MOVEM 1,BUFHD
07500 HRRZ 2,-3(1) ;SIZE
07600 ADDI 2,-3(1)
07700 MOVEM 2,BUFEND
07800
07900 CLR2: MOVE A,BUFHD
08000 MOVEI B,1
08100 MOVEM B,1(A)
08200 MOVEI B,2(A)
08300 HRLI B,1(A)
08400 BLT B,@BUFEND ;SET DPY BUFFER TO NULL CHARACTER WORDS
08500 JRST LV3
08600
08700
08800 DPYPARS: SKIPN 1,BUFHD
08900 POPJ P,
09000 MOVE 2,DPYPTR
09100 MOVEM 2,-2(1)
09200 MOVEI 2,2(2)
09300 SUB 2,1
09400 MOVEM 2,-1(1)
09500 SUBI 1,2
09600 POPJ P,
09700
09800 DPYRESET: COMPAT(1)
09900 JUMPE 1,@RETURN
10000 ADDI 1,2
10100 MOVEM 1,BUFHD
10200 HRRZ 2,-3(1)
10300 ADDI 2,-3(1)
10400 MOVEM 2,BUFEND
10500 HRRZ 2,-1(1) ;SIZE
10600 ADDI 2,-2(1) ;START ADR
10700 MOVE 1,2
10800 JRST CLR2+1
10900
11000 INTERNAL DPYTYP,TYPLOC
11100 DPYTYP: PUSHJ P,DPYTST
11200 COMPAT(3)
11300 SKIPGE DPYFLG
11400 JRST @RETURN
11500 DPYPOS(1) ;POSITION
11600 DPB 2,[POINT 9,3,26]
11700 DPYSIZ (3)
11800 JRST @RETURN
11900
12000 TYPLOC: PUSHJ P,DPYTST
12100 COMPAT(2)
12200 SKIPGE DPYFLG
12300 JRST @RETURN
12400 DPYPOS (1)
12500 SUB 1,2
12600 IDIVI 1,=46 ;23 UNITS PER LINE
12700 CAIG 1,2
12800 MOVEI 1,2 ;AT LEAST 2 GLITCHES
12900 LSH 1,=9
13000 DPYSIZ 2(1) ;2 LINES PER GLITCH
13100 JRST @RETURN
00100 ;SAIL DECLARATIONS
00200 ;EXTERNAL PROCEDURE PGSEL(INTEGER POG)
00300 ;EXTERNAL PROCEDURE UPGMVM(INTEGER VAL;REFERENCE INTEGER ADR);
00400 ;EXTERNAL INTEGER PROCEDURE UPGMVE(REFERENCE INTEGER ADR);
00500
00600 INTERNAL PGSEL,UPGMVM,UPGMVE,GETPOG,RELPOG
00700 INTERNAL ACPOGS,ACCPOG,DACPOG,POGON;
00800 PGSEL: COMPAT(1)
00900 JUMPL 1,@RETURN
01000 SKIPN DPYFLG
01100 PGSEL (1)
01200 JRST @RETURN
01300
01400 UPGMVM: COMPAT(2)
01500 SKIPN DPYFLG
01600 UPGMVM 1,(2)
01700 JRST @RETURN
01800
01900 UPGMVE: COMPAT(1)
02000 SKIPN DPYFLG
02100 UPGMVE 1,(1)
02200 JRST @RETURN
02300
02400 POGWD: XWD 777774,0
02500
02600 GETPOG: MOVE POGWD
02700 JFFO .+2
02800 MOVNI 1,1
02900 ROT (1)
03000 TLZ 400000
03100 MOVN 2,1
03200 ROT(2)
03300 MOVEM POGWD
03400 POPJ P,
03500
03600 HYDPOG:
03700 RELPOG: JSP POGSUB
03800 ORM 1,POGWD
03900 ANDCAM 1,POGON
04000 SETZM BUFHD+1
04100 SKIPG DPYFLG
04200 JRST SH2
04300 OPDEF DDOUT [XWD 715140,0]
04400 DDOUT [DDCLR
04500 3]
04600 SUB P,[XWD 2,2]
04700 JRST @2(P)
04800
04900 DDCLR: 136004001324
05000 136004001324
05100 0
05200
05300 ACPOGS: MOVS 1,-1(P)
05400 MOVSM 1,POGON
05500 SKIPN DPYFLG
05600 PGIOT 1,(1)
05700 SUB P,[XWD 2,2]
05800 JRST @2(P)
05900
06000 POGSUB: MOVN 2,-1(P)
06100 MOVSI 1,400000
06200 LSH 1,(2)
06300 JRST @0
06400
06500 DACPOG: JSP POGSUB
06600 ANDCA 1,POGON
06700 ACPOG2: MOVSS 1
06800 JRST ACPOGS+1
06900
07000 ACCPOG: JSP POGSUB
07100 OR 1,POGON
07200 JRST ACPOG2
07300
07400 RETURN: 0
07500
07600 INTERNAL DPYPTR;
07700 DPYPTR: 0
07800 BUFEND: 0
07900 BUFHD: 0
08000 0
08100
00100 BEGIN DDCODE
00200
00300 A←1
00400 B←2
00500 C←3
00600 D←4
00700 X←1
00800 Y←2
00900 PT←5
01000 N←6
01100 M←7
01200 SPT←10
01300 K←11
01400 P←17
01500
01600 COFFY←2;
01700 CR←15
01800 LF←12
01900
02000 INTERNAL IIIWD;
02100 EXTERNAL LINTAB,PTTAB,GFSIZX,GFSIZY,GFSIZL,X0,Y0,SCALX,SCALY,XCENT
02200 EXTERNAL YCENT,LMAR,CHRTBL,CHASP,CHSCAL
02300 ↑IIIWD: MOVEI K,1
02400 MOVE LINTAB
02500 HRRM LT1
02600 HRRM LT2
02700
02800 MOVE PTTAB
02900 HRRM PT1
03000 HRRM PT2
03100 MOVE A,-1(P)
03200 POP P,-1(P)
03300 TRNE A,1
03400 JRST PSTR ;A STRING
03500 MOVE B,A
03600 ANDI B,17
03700 CAIN B,2
03800 JRST [PUSH P,A ;SHORT VECTOR WORD
03900 LSH A,-24
04000 PUSHJ P,MKSVEC
04100 POP P,A
04200 LSH A,-4
04300 JRST MKSVEC]
04400 CAIE B,6
04500 POPJ P,
04600 LDB C,[POINT 3,A,27] ;LONG VECTOR WORD
04700 JUMPE C,MKLVEC
04800 MOVE C,CHSIZS(C) ;CHANGE CHARACTER SIZE
04900 MOVE D,CHSCAL
05000 FSC D,233
05100 FMP D,C
05200 FMP D,CHASP
05300 FIX D,233000
05400 MOVEM D,CHSCX#
05500 MOVE D,CHSCAL
05600 FSC D,233
05700 FMP C,D
05800 FIX C,233000
05900 MOVEM C,CHSCY#
06000 IMULI C,=12
06100 MOVEM D,CHSC12#
06200 MOVE C,CHSCY
06300 IMULI C,COFFY
06400 MOVEM C,COFCC#
06500
06600
06700 MKLVEC: MOVE C,A
06800 LDB X,[POINT 11,C,10]
06900 LDB Y,[POINT 11,C,21]
07000 TRNE X,2000
07100 ORCMI X,3777
07200 TRNE Y,2000
07300 ORCMI Y,3777
07400 LDB C,[POINT 3,C,31]
07500 JRST MKVEC
07600
07700
07800 MKSVEC: MOVE C,A
07900 LDB X,[POINT 7,C,26]
08000 LDB Y,[POINT 7,C,33]
08100 ANDI C,3
08200 TRNE X,100
08300 ORCMI X,77
08400 TRNE Y,100
08500 ORCMI Y,77
08600
08700 MKVEC: IMUL X,SCALX
08800 IMUL Y,SCALY
08900 MOVNS Y
09000 TRZE C,4
09100 JRST [ADD X,XCENT ;ABSOLUTE VECTOR
09200 ADD Y,YCENT
09300 SUB X,X0
09400 SUB Y,Y0
09500 JRST .+1]
09600 MKV2: JRST VTAB(C)
09700
09800 VTAB: JRST MKLINE ;VISIBLE VECTOR
09900 JRST MKPTR ;END POINT VECTOR
10000 JRST [ADDB X,X0 ;INVISIBLE VECTOR
10100 ADDB Y,Y0
10200 POPJ P,]
10300 CPOPJ: POPJ P, ;DO NOTHING
10400
10500
10600 MKLINE: PUSH P,X
10700 PUSH P,Y
10800 MOVM C,X
10900 MOVM D,Y
11000 CAMG C,D
11100 MOVE C,D ;C←MAX(C,D)
11200 HLRZM C,M;
11300 AOS M
11400 IDIV Y,M
11500 MOVEM Y,DY#
11600 IDIV X,M
11700 MOVEM X,DX#
11800 MOVE X,X0
11900 MOVE Y,Y0
12000
12100 L: HLRZ C,X
12200 HLRZ D,Y
12300 CAMGE C,GFSIZX
12400 CAML D,GFSIZY
12500 JRST L2 ;OFF SCREEN
12600 LT1: MOVE D,LINTAB(D)
12700 PT1: DPB K,PTTAB(C)
12800 L2: ADD X,DX
12900 ADD Y,DY
13000 SOJGE M,L
13100 POP P,Y
13200 POP P,X
13300
13400 MKPTR: ADDB X,X0
13500 ADDB Y,Y0
13600
13700 MKPT: HLRZ C,X
13800 HLRZ D,Y
13900 CAMGE C,GFSIZX
14000 CAML D,GFSIZY
14100 POPJ P, ;OFF SCREEN
14200 LT2: MOVE D,LINTAB(D)
14300 PT2: DPB K,PTTAB(C)
14400 POPJ P,
14500
14600
14700 CHARS: 0
14800 0
14900
15000 PSTR: MOVEM A,CHARS
15100 MOVE COFCC
15200 ADDM Y0
15300 MOVE PT,[POINT 7,CHARS,-1]
15400
15500 CLOOP: ILDB N,PT
15600 JUMPE N, [MOVN COFCC
15700 ADDM Y0
15800 POPJ P,]
15900 CAIN N,CR
16000 JRST [MOVE A,LMAR ;CARRIAGE RETURN
16100 MOVEM A,X0
16200 JRST CLOOP]
16300 CAIN A,LF
16400 JRST [MOVE A,CHSC12 ;LINE FEED
16500 ADDM A,Y0
16600 JRST CLOOP]
16700 HLRZ SPT,CHRTBL(N)
16800 HRLI SPT,(<POINT 5,0>)
16900 HRRZ N,CHRTBL(N)
17000 SLOOP: JUMPLE N,CLOOP
17100 ILDB C,SPT
17200 ILDB X,SPT
17300 ILDB Y,SPT
17400 TRNE X,20
17500 ORCMI X,37
17600 TRNE Y,20
17700 ORCMI Y,37
17800 MOVNS Y
17900 IMUL X,CHSCX
18000 IMUL Y,CHSCY
18100 JUMPE C, [PUSHJ P,MKPTR
18200 JRST LX1]
18300 CAIE C,2
18400 JRST [ADDM X,X0
18500 ADDM Y,Y0
18600 SOJA N,SLOOP]
18700 PUSHJ P,MKLINE
18800 LX1: SOJA N,SLOOP
18900
19000 CHSIZS: 1.33
19100 2.01
19200 2.34
19300 2.67
19400 4.01
19500 5.33
19600 8.13
19700
19800 BEND DDCODE
00100 BEGIN GODRAW
00200
00300 Y←1
00400 X←2
00500 AC3←3
00600 AC4←4
00700 AC5←5
00800 CHR←6
00900 HPOS←7
01000 POS←10
01100 P←17
01200
01300 INTERN PUTBWB
01400 EXTERN DDBUF
01500
01600 PUTBWB: MOVEM 1,SAVE4# ;SAVE AC'S 1,7,AND 10
01700 MOVEM 7,SAVE7#
01800 MOVEM 10,SAVE10#
01900 MOVE CHR,-1(P) ;CHARACTER
02000 MOVE Y,-2(P) ;BOARD POSITON
02100 IDIVI Y,=21 ;X IN AC2
02200 CAILE Y,0
02300 CAIL Y,=20
02400 JRST BWBEND
02500 CAILE X,0
02600 CAIL X,=20
02700 JRST BWBEND
02800 MOVE HPOS,Y
02900 IMULI HPOS,=19 ;19 LINES PER SQUARE
03000 IDIVI HPOS,4 ;WHICH VERTICAL SUBFIELD?
03100 IMULI POS,=1300 ;SUBFIELD OFFSET
03200 IMULI HPOS,=13 ;13 WORDS PER LINE
03300 ADD POS,HPOS ;VERTICAL OFFSET
03400 MOVE AC3,X
03500 ADDI AC3,4 ;TWO WORD HEADER ON EACH LINE
03600 IDIVI AC3,2 ;REMAINDER GOES TO AC4
03700 ADD POS,AC3 ;ADD HORIZONTAL OFFSET
03800 HRLZI AC5,(<POINT 16,0(POS),15>) ;ODD COLUMNS
03900 SKIPE AC4
04000 HRLZI AC5,(<POINT 16,0(POS),31>) ;EVEN COLUMNS
04100 HRR AC5,DDBUF
04200 MOVEM AC5,POINTER#
04300
04400 CAIN CHR,102
04500 JRST BLACK
04600 CAIN CHR,127
04700 JRST WHITE
04800
04900 EMPTY: SETZM HDCPT#
05000 CAIE Y,4
05100 CAIN Y,=10
05200 JRST TRYX
05300 CAIE Y,=16
05400 JRST NOHCP
05500 TRYX: CAIE X,4
05600 CAIN X,=10
05700 JRST HCP
05800 CAIE X,=16
05900 JRST NOHCP
06000 HCP: SETOM HDCPT
06100 NOHCP: MOVEI CHR,200 ;VERTICAL LINE
06200 CAIN Y,1 ;TOP MARGIN
06300 HRRZI CHR, ;BLANK
06400 MOVEI AC3,7
06500 PUSHJ P,DEPOSIT
06600 SOJG AC3,.-1
06700 SKIPE HDCPT
06800 MOVEI CHR,700 ;HANDICAP DOT
06900 PUSHJ P,DEPOSIT
07000 SKIPE HDCPT
07100 MOVEI CHR,1740
07200 PUSHJ P,DEPOSIT
07300 MOVEI CHR,-1 ;HORIZONTAL LINE
07400 CAIN X,1 ;LEFT MARGIN
07500 MOVEI CHR,377 ;LINE TO RIGHT
07600 CAIN X,=19 ;RIGHT MARGIN
07700 MOVEI CHR,177600 ;LINE TO LEFT
07800 PUSHJ P,DEPOSIT
07900 CAIE Y,=19 ;BOTTOM MARGIN
08000 JRST FINISH
08100 HRRZI CHR,
08200 MOVEI AC3,=9
08300 PUSHJ P,DEPOSIT
08400 SOJG AC3,.-1
08500 JRST BWBEND
08600 FINISH: MOVEI CHR,200 ;VERTICAL LINE
08700 SKIPE HDCPT
08800 MOVEI CHR,1740 ;HANDICAP DOT
08900 PUSHJ P,DEPOSIT
09000 SKIPE HDCPT
09100 MOVEI CHR,700
09200 PUSHJ P,DEPOSIT
09300 MOVEI CHR,200
09400 MOVEI AC3,7
09500 PUSHJ P,DEPOSIT
09600 SOJG AC3,.-1
09700 JRST BWBEND
09800
09900 BLACK: MOVEI AC3,BLKWRD
10000 JRST WHITE+1
10100 WHITE: MOVEI AC3,WHTWRD
10200 HRLI AC3,-=19
10300 MOVE CHR,(AC3)
10400 PUSHJ P,DEPOSIT
10500 AOBJN AC3,.-2
10600 BWBEND: MOVE 1,SAVE4 ;RESTORE AC'S
10700 MOVE 7,SAVE7
10800 MOVE 10,SAVE10
10900 SUB P,[XWD 3,3]
11000 JRST @3(P)
11100
11200 DEPOSIT:DPB CHR,POINTER
11300 ADDI POS,=1300 ;NEXT SUBFIELD
11400 CAIL POS,=5200 ;MAX DDBUF
11500 SUBI POS,=5187 ;SUB 4 SUBFIELDS AND ADD 1 LINE
11600 POPJ P,
11700
11800 WHTWRD: OCT 1700,7760,17770,37774,77776,77776,177777,177777,177777,177777
11900 OCT 177777,177777,177777,77776,77776,37774,17770,7760,1700
12000 BLKWRD: OCT 1700,6060,10010,20004,40002,40002,100001,100001,100001,100001
12100 OCT 100001,100001,100001,40002,40002,20004,10010,6060,1700
12200
12300 BEND GODRAW
00100 BEGIN SWAPPER
00200 INTERN SWAPIT
00300
00400 SWAPIT: HRROI 2,-1
00500 GETLIN 2
00600 TLNE 2,20000
00700 POPJ 17,
00800 HRRZI 1,INFO
00900 CALL 1,[SIXBIT /SWAP/]
01000 INFO: SIXBIT /DSK/
01100 SIXBIT /IIIGO/
01200 SIXBIT /DMP/
01300 0
01400 SIXBIT / 1 3/
01500 BEND SWAPPER
01600 END